Various computing devices, including desktop computers, laptops, tablets, and mobile computing devices such as smart phones, may store a number of shared libraries. A shared library may be a collection of functions, subroutines, classes, values, configuration data, templates, and/or other information that may be utilized by multiple applications executing on the computing device. A single copy of the shared library may be compiled and loaded into memory at run time, and multiple applications may simultaneously access the shared library.
In some instances, it may be advantageous for applications to be able to dynamically alter the code of a shared library during run time. For example, instrumentation code inserted into a shared library may allow an application to trace the number of times and the sequence that certain functions in the shared library are invoked by one or more applications. In another example, the addition of code in a shared library may make debugging easier. However, shared libraries are usually loaded and mapped into memory as read only, so applications are not able to independently and dynamically alter the code of a shared library.